package model;

import exception.ContaInexistenteException;
import global.Global;

/**
 * Pedido de depósito vindo de uma agência remota. 
 * 
 * @author pedrosa
 *
 */
public class Deposito implements Mensagem {
	
	private static final long serialVersionUID = 1L;
	private int valorInteiro,valorDecimal;
	private String codConta;	
	
	/**
	 * 
	 * @param valorInteiro Porção inteira a depositar.
	 * @param valorDecimal Porção fracionária a depositar.
	 * @param codConta Código da conta a receber o depósito.
	 */
	public Deposito(int valorInteiro, int valorDecimal, String codConta) {
		this.valorInteiro = valorInteiro;
		this.valorDecimal = valorDecimal;
		this.codConta = codConta;
	}
	
	@Override
	public StatusMensagemEnum executar(Agencia ag, Integer id, Runnable r) {		
		try {
			System.out.println("[" + id + "] Requisicao Remota - \n   Conta: " + codConta + "\n   Opera��o: Deposito - Valor desejado: " + valorInteiro + "," + (valorDecimal == 0 ? "00" : Global.correctDecimal(valorDecimal)));

			ag.deposito(valorInteiro, valorDecimal, codConta, r);

			System.out.println("[" + id + "] " + StatusMensagemEnum.SUCESSO);
			return StatusMensagemEnum.SUCESSO;
		} catch (ContaInexistenteException e) {
			return StatusMensagemEnum.CONTANAOEXISTENTE;
		} catch (InterruptedException e) {
			return StatusMensagemEnum.TIMEOUT;
		}		
	}	
	
}
